package org.gemini.markdown.view; import android.text.Editable; import android.text.TextWatcher; import android.text.style.CharacterStyle; import org.gemini.markdown.generator.MarkdownSyntaxGenerator; import org.gemini.markdown.model.MarkdownSyntaxModel; import org.gemini.markdown.model.type.MarkdownSyntaxType; import org.gemini.markdown.model.type.Range; import java.util.ArrayList; import java.util.List; /** * Created by geminiwen on 15/3/13. */ public class MarkdownTextChangeWatcher implements TextWatcher { /** * use to remove span, avoid removing edit span */ private List<CharacterStyle> mLastStyle = new ArrayList<>(); @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } /** * {@inheritDoc} * @param s */ @Override public void afterTextChanged(Editable s) { for (CharacterStyle style: mLastStyle) { s.removeSpan(style); } List<MarkdownSyntaxModel> models = MarkdownSyntaxGenerator.syntaxModelsForString(s.toString()); if (models.size() == 0) { return; } mLastStyle.clear(); for (MarkdownSyntaxModel model : models) { MarkdownSyntaxType type = model.getSyntaxType(); Range range = model.getRange(); // CharacterStyle style = MarkdownSyntaxGenerator.styleFromSyntaxType(type); int low = range.getLower(); int upper = range.getUpper(); // mLastStyle.add(style); // s.setSpan(style, low, upper, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } } }